"""
4. 切片的使用

题目：编写一个Python程序，随机生成20个由大小写字母、数字和下划线组成的字符组，并使用字符串、列表、集合和元组的方法打印出来。
对字符串和列表切片，用两种方式取出4-14位的字符。
提示：
    1. 使用random.randint()函数生成随机整数。
    2. 使用random.choice()函数从字符组中随机选择一个字符。
    3. 字符串切片：str[start:end]，列表切片：list[start:end]。
"""

import random

# 随机生成20个字符（请补充完整代码）


import random
import string

# 生成包含大小写字母、数字和下划线的字符集合
all_characters = string.ascii_letters + string.digits + "_"

# 随机生成20个由大小写字母、数字和下划线组成的字符组
# 用字符串的方式存储
string_result = ""
for _ in range(20):
    random_char = random.choice(all_characters)
    string_result += random_char

# 用列表的方式存储
list_result = []
for _ in range(20):
    random_char = random.choice(all_characters)
    list_result.append(random_char)

# 用集合的方式存储
set_result = set()
while len(set_result) < 20:
    random_char = random.choice(all_characters)
    set_result.add(random_char)
set_result = list(set_result)

# 用元组的方式存储（这里先通过列表生成，再转换为元组）
tuple_result = tuple(list_result)

# 打印出这几种存储方式的结果
print("字符串形式：", string_result)
print("列表形式：", list_result)
print("集合形式（转换为列表后展示）：", set_result)
print("元组形式：", tuple_result)

# 对字符串切片，用两种方式取出4-14位的字符
print("字符串切片第一种方式：", string_result[4:14])
print("字符串切片第二种方式：", string_result.__getitem__(slice(4, 14)))

# 对列表切片，用两种方式取出4-14位的字符
print("列表切片第一种方式：", list_result[4:14])
print("列表切片第二种方式：", list_result.__getitem__(slice(4, 14)))